package br.com.imob.dao;

import br.com.imob.modelo.Conta;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 11:04:34 02/02/2011 2011
 *  @version 
 */

public class ContaDao extends GenericDao {
	
	public ContaDao() {  }
	
	public Integer adicionarConta(Conta conta) {
		saveOrUpdatePojo(conta);
		return conta.getContaId();
	}
	
	public void removerConta(Conta conta) {
		removerPojo(conta);
	}

	/* Precisa definir o ID */
	public void atualizarConta(Conta recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	/**
	 * Editar um Conta
	 * @param String oldConta
	 * @param String newConta
	 */
	public void atualizarConta(String oldConta, String newConta ) {
		if ( ( !"".equals(oldConta) && oldConta != null )
			&& ( !"".equals(newConta) && newConta != null ) ) 
			atualizarConta( getContaQNamed(oldConta), new Conta(newConta) );
	}
	
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarConta(Conta recuperar, Conta alterar) {
		recuperar = retriveConta(recuperar);
		
		if(alterar.getConta() != null)
			recuperar.setConta(alterar.getConta());
		if(alterar.getAgencia() != null)
			recuperar.setAgencia(alterar.getAgencia());
		if(alterar.getBanco() != null)
			recuperar.setBanco(alterar.getBanco());
		if(alterar.getOperacao() != null)
			recuperar.setOperacao(alterar.getOperacao());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de Conta
	protected Conta retriveConta(Conta recuperar) {
		if(recuperar.getContaId() != null)
			return getConta(recuperar.getContaId());
		if(recuperar.getConta() != null)
			return getContaQNamed(recuperar.getConta());
		if(recuperar.getAgencia() != null)
			return getContaQNamedAgencia(recuperar.getAgencia());
		if(recuperar.getBanco() != null)
			return getContaQNamedBanco(recuperar.getBanco());
		if(recuperar.getOperacao() != null)
			return getContaQNamedOperacao(recuperar.getOperacao());
		
		return recuperar;
	}
	
	
//	Consultas
	public Conta getConta(Integer key) {
		return getPojoByID(Conta.class, key);
	}
	public Conta getContaByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Conta getContaQNamed(String fltrConta) {
		return getPojoByQNamed("Conta.findByConta", fltrConta);
	}
	public Conta getContaQNamedAgencia(String fltrAgencia) {
		return getPojoByQNamed("Conta.findByAgencia", fltrAgencia);
	}
	public Conta getContaQNamedBanco(String fltrComer) {
		return getPojoByQNamed("Conta.findByBanco", fltrComer);
	}
	public Conta getContaQNamedOperacao(String fltrOperacao) {
		return getPojoByQNamed("Conta.findByOperacao", fltrOperacao);
	}
	
	public List<Conta> getContas() {
		return (List<Conta>) getALL(Conta.class);
	}
	public List<Conta> getContasQNamedPRX(String fltrConta) {
		return getListByQNamedPRX("Conta.findLikeByConta", fltrConta);
	}
	public List<Conta> getContasQNamedAgenciaPRX(String fltrAgencia) {
		return getListByQNamedPRX("Conta.findLikeByAgencia", fltrAgencia);
	}
	public List<Conta> getContasQNamedBancoPRX(String fltrBanco) {
		return getListByQNamedPRX("Conta.findLikeByBanco", fltrBanco);
	}
	public List<Conta> getContasQNamedOperacaoPRX(String fltrOperacao) {
		return getListByQNamedPRX("Conta.findLikeByOperacao", fltrOperacao);
	}
	public List<Conta> getContasByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}

	
}
